home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 3: CDPD 3
/
Almathera Ten on Ten - Disc 3: CDPD3.iso
/
scope
/
101-125
/
scopedisk122
/
bassub
/
qsort.sub
< prev
next >
Wrap
Text File
|
1995-03-19
|
3KB
|
140 lines
REM Sorting routines using quicksort
'QSnums for numbers
'QSstr for strings
'QSints for integers
'Table#(),Table$(),Table%(0) are arrays of elements to be sorted
'Number of Entries% is number of elements in Table()
REM QSnums
SUB QSnums (Table#(1),NumberofEntries%) STATIC
DIM Switched%(20+NumberofEntries%/4)
Switched%(1)=1
Switched%(2)=NumberofEntries%
Pointer%=2
QSnums1:
Last%=Switched%(Pointer%)
Pointer%=Pointer%-1
first%=Switched%(Pointer%)
Pointer%=Pointer%-1
LeadIndex%=first%
QSnums2:
TrailIndex%=Last%
MidPoint#=Table#((first%+Last%)/2)
QSnums3:
IF Table#(LeadIndex%)<MidPoint# THEN
LeadIndex%=LeadIndex%+1
GOTO QSnums3
END IF
QSnums4:
IF Table#(TrailIndex%)>MidPoint# THEN
TrailIndex%=TrailIndex%-1
GOTO QSnums4
END IF
IF LeadIndex%<=TrailIndex% THEN
Temp#=Table#(LeadIndex%)
Table#(LeadIndex%)=Table#(TrailIndex%)
Table#(TrailIndex%)=Temp#
LeadIndex%=LeadIndex%+1
TrailIndex%=TrailIndex%-1
END IF
IF LeadIndex%<=TrailIndex% THEN QSnums3
IF first%<TrailIndex% THEN
Pointer%=Pointer%+1
Switched%(Pointer%)=first%
Pointer%=Pointer%+1
Switched%(Pointer%)=TrailIndex%
END IF
first%=LeadIndex%
IF first%<Last% THEN QSnums2
IF Pointer%<>0 THEN QSnums1
ERASE Switched%
END SUB
REM QSstr
SUB QSstr (Table$(1),NumberofEntries%) STATIC:
DIM Switched%(20+NumberofEntries%/4)
Switched%(1)=1
Switched%(2)=NumberofEntries%
Pointer%=2
QSstr1:
Last%=Switched%(Pointer%)
Pointer%=Pointer%-1
first%=Switched%(Pointer%)
Pointer%=Pointer%-1
LeadIndex%=first%
QSstr2:
TrailIndex%=Last%
MidPoint$=Table$((first%+Last%)/2)
QSstr3:
IF UCASE$(Table$(LeadIndex%))<UCASE$(MidPoint$) THEN
LeadIndex%=LeadIndex%+1
GOTO QSstr3
END IF
QSstr4:
IF UCASE$(Table$(TrailIndex%))>UCASE$(MidPoint$) THEN
TrailIndex%=TrailIndex%-1
GOTO QSstr4
END IF
IF LeadIndex%<=TrailIndex% THEN
Temp$=Table$(LeadIndex%)
Table$(LeadIndex%)=Table$(TrailIndex%)
Table$(TrailIndex%)=Temp$
LeadIndex%=LeadIndex%+1
TrailIndex%=TrailIndex%-1
END IF
IF LeadIndex%<=TrailIndex% THEN QSstr3
IF first%<TrailIndex% THEN
Pointer%=Pointer%+1
Switched%(Pointer%)=first%
Pointer%=Pointer%+1
Switched%(Pointer%)=TrailIndex%
END IF
first%=LeadIndex%
IF first%<Last% THEN QSstr2
IF Pointer%<>0 THEN QSstr1
ERASE Switched%
END SUB
REM QSints
SUB QSints (Table%(1),NumberofEntries%) STATIC
DIM Switched%(20+NumberofEntries%/4)
Switched%(1)=1
Switched%(2)=NumberofEntries%
Pointer%=2
QSints1:
Last%=Switched%(Pointer%)
Pointer%=Pointer%-1
first%=Switched%(Pointer%)
Pointer%=Pointer%-1
LeadIndex%=first%
QSints2:
TrailIndex%=Last%
MidPoint%=Table%((first%+Last%)/2)
QSints3:
IF Table%(LeadIndex%)<MidPoint% THEN
LeadIndex%=LeadIndex%+1
GOTO QSints3
END IF
QSints4:
IF Table%(TrailIndex%)>MidPoint% THEN
TrailIndex%=TrailIndex%-1
GOTO QSints4
END IF
IF LeadIndex%<=TrailIndex% THEN
Temp%=Table%(LeadIndex%)
Table%(LeadIndex%)=Table%(TrailIndex%)
Table%(TrailIndex%)=Temp%
LeadIndex%=LeadIndex%+1
TrailIndex%=TrailIndex%-1
END IF
IF LeadIndex%<=TrailIndex% THEN QSints3
IF first%<TrailIndex% THEN
Pointer%=Pointer%+1
Switched%(Pointer%)=first%
Pointer%=Pointer%+1
Switched%(Pointer%)=TrailIndex%
END IF
first%=LeadIndex%
IF first%<Last% THEN QSints2
IF Pointer%<>0 THEN QSints1
ERASE Switched%
END SUB